//
// Created by calm on 2023-12-28.
//
#include <stdio.h>
#include <malloc.h>

#define  LENGTH 20
//malloc 动态申请内存,会申请连续的内存空间
int main(){
   /*  int length;
    scanf("%d",&length);
    //int arr[length]={0};
    int * arr=(int *) malloc(sizeof(int)*length);

    int data=1;
    for(int i=0;i<length;i++){
        arr[i]=data++;
    }
    printf("%d",1);

    free(arr);*/

    //动态的二维数组
    int ** arr2;
    int rows,cols;
    scanf("%d %d",&rows,&cols);

    //1.声明二维指针
    arr2=(int **) malloc(sizeof(int *) * rows);
    for(int i=0;i<rows;i++){
        arr2[i]=(int *) malloc(sizeof(int) * cols);
    }
    //对二维数组进行初始化
    int data=1;
    for(int r=0;r<rows;r++){
        for(int c=0;c<cols;c++){
            arr2[r][c]=data++;
        }
    }

    for(int r=0;r<rows;r++){
        for(int c=0;c<cols;c++){
            printf("%d", arr2[r][c]);
        }
        printf("\n");
    }

    //释放内存
    for(int i=0;i<rows;i++){
        free(arr2[i]);
    }
    free(arr2);

    return 0;
}